package Graficas;

/**
 * Este SpriteMovements tiene una prioridad, lo que hace es que siempre intenta devolver el sprite correspondiente a un movimiento dado. Si este movimiento
 * se queda sin sprites, es decir que ya se obtuvieron todos los sprites correspondientes a ese movimiento entonces la prioridad desaparece.
 * Mientras halla una prioridad no es posible cambiarla hasta que no desaparezca.
 * 
 * @author MATIAS
 *
 */
public class SpriteMovementsPrioridad extends SpriteMovements {
	protected boolean pausar;
	protected int prioridad,retardoPrioridad,maxRetardoPrioridad;
	public SpriteMovementsPrioridad(Sprite[] sprites, int cantSpritesDir, int cantDir, int maxRetardo) {
		super(sprites, cantSpritesDir, cantDir, maxRetardo);
		prioridad=-1;
	}
	public void setRetardoPrioridad(int retardo){
		this.maxRetardoPrioridad=retardo;
		this.retardoPrioridad=retardo;
	}
	/*
	 * La variable pausar hace que cuando termine los movimientos de la prioridad deja ciclar los sprites hasta que pausar == false
	 */
	public void setPrioridad(int mov,boolean pausar){
		if (prioridad ==-1 && mov<=this.cantDir+1 && mov>=0){
			this.prioridad=mov;
			this.pausar=pausar;
		}
	}
	public void setPausar(boolean pausar){
		this.pausar=pausar;
	}

	@Override
	public Sprite getSprite(int mov) {
		if (prioridad != -1){
			if (retardoPrioridad > 0)
				retardoPrioridad--;
			else {
				imgActual = ((imgActual + 1) % cantSpritesDir) + prioridad * cantSpritesDir;
				retardoPrioridad = maxRetardoPrioridad;
				
				if (imgActual+1==this.cantSpritesDir+ prioridad * cantSpritesDir)
					prioridad=-1;
			}
			return sprites[imgActual];
		}
		else{
			if (!pausar)
				return super.getSprite(mov);
			else
				return sprites[imgActual];
		}
	
	}
	public SpriteMovements clone(){
		Sprite[] spritesClone= new Sprite[sprites.length];
		for (int i=0;i<sprites.length;i++){
			spritesClone[i]=sprites[i];
		}
		return new SpriteMovementsPrioridad(spritesClone,this.cantSpritesDir,this.cantDir,this.maxRetardo);
	}
	

}
